package org.sampleSpringFramework.aop.aspect;

import java.lang.reflect.Method;

// 横切逻辑骨架，继承了该抽象类的类可以获取类似spring中@Before等通知注解的功能
public abstract class DefaultAspect {

	/**
	 * 相当于spring中的@before注解
	 * @param clazz 被代理的目标类
	 * @param method 被代理的目标方法
	 * @param args 目标方法的参数列表
	 * @throws Throwable
	 */
	public void before(Class<?> clazz, Method method,Object[] args) throws Throwable{

	}

	/**
	 * 相当于spring中的@afterReturning注解
	 * @param clazz 被代理的目标类
	 * @param method 被代理的目标方法
	 * @param args 目标方法的参数列表
	 * @param result 目标方法的返回值
	 * @return 返回值
	 * @throws Throwable
	 */
	public Object afterReturning(Class<?> clazz, Method method,Object[] args,Object result) throws Throwable{
		return result;
	}

	/**
	 * 相当于spring中的@afterThrowing注解
	 * @param clazz 被代理的目标类
	 * @param method 被代理的目标方法
	 * @param args 目标方法的参数列表
	 * @param e 抛出的异常
	 * @throws Throwable
	 */
	public void afterThrowing(Class<?> clazz, Method method,Object[] args,Throwable e) throws Throwable{

	}
}
